Java 打從出生開始,就支援 Unicode,一路從 1.1 版,直到 Java SE 7 支援 6.0 版。除了能顯示、處理 Unicode 字元之外,甚至連程式碼都能用非英文來寫,例如第八天的 Fruit 類例,我們就是用中文來命名變數的。那我們該如何得知一個字元的 Unicode 碼呢?
如果你想查繁體中文 Unicode 字碼的話,可以上一個叫 全字庫 的網站,用注音或其它方式輸入中文字後,它會顯示它的 Unicode 碼。
但其實 JDK 本身就有一個工具程式讓你來查詢 Unicode 碼,只要你安裝好 JDK 後,就會順便安裝這個工具程式,它的名稱叫 native2ascii。最簡單的使用方式是,打開終端機,輸入 native2ascii ,然後就可以輸入文字,按下 enter 鍵後,就會顯示字碼,不想查詢了,就按 CTRL + D 結束程式。
完整的使用方式,請參考 Oracle 官網上的 說明。
我們也可以直接寫 Java 的程式來處理,因為 Java 本身不論處理什麼字元,都是以 Unicode 來處理,在 Java 裡,字元的型別是 char ,它等同於 int 型別。在 Java 程式裡,表示一個 char 是用單引號(') 來把字元包起來,例如:'幫',所以我們只需要把字元強迫轉型成 int 型別,就可以得到它的 Unicode 碼了,請看範例程式:
package idv.jacky.ironman4.day28;
public class Day28Example1 {
public static void main(String[] args) {
System.out.println((int)'幫');
System.out.println(Integer.toHexString(24171));
System.out.println(Integer.toHexString('幫'));
System.out.println("iT \u90A6 \u5e6b \u5fd9");
}
}
執行結果:
程式第6行就是我剛剛說的,直接把 char 轉型成 int,就得到該字元的 Unicode 碼,但它是十進位,我們可以用之前學過的 Integer.toHexString 方法來轉成16進位格式。Java 程式碼裡要用 Unicode 碼來表示一個字元時,得用 [b] \uxxxx [\b] 這種格式來表示,[b]\u[\b]就是告訴 Java 說,接下來兩組的16進位數字是一個 Unicode 的字元。例如第9行的 [b]\u5e6b[\b] 就是[b]幫[\b] 這個字元在 Java 程式碼裡表現的方式。
我們自己也可以寫出像 native2ascii 那樣的轉碼工具程式:
package idv.jacky.ironman4.day28;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Day28Example2 {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(true) {
try {
System.out.print("請輸入文字:");
String character = in.readLine();
char[] ch = character.toCharArray();
StringBuilder sb = new StringBuilder(ch.length);
for(int i : ch)
sb.append(Integer.toHexString(i))
.append(" ");
System.out.printf("%s 的 Unicode 編碼是: %s%n", character, sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
從命令列上輸入一行字串,相信大家都很熟悉了。得到所輸入的字茨後,我們把它轉換成 char 陣列(第16行),然後針對陣列裡的每個 char 去轉換它,這樣就是一個簡易的轉碼工具了。